/*
 * ModeloX.h
 *
 *  Created on: 23/06/2012
 *      Author: natuchis
 */

#ifndef MODELOX_H_
#define MODELOX_H_

#include "Modelo.h"

#include "Contexto.h"

#include <map>
#include <string>
using namespace std;

class ModeloX: public Modelo {

public:

	ModeloX();
	virtual ~ModeloX();
	virtual void actualizar(string contexto, char carac);

	void agregarContexto (string contexto);
	bool existeContexto (string contexto);

	void agregarCaracter(char carac);

	bool existeCaracterEnEsteContexto (string contexto, char carac);

	void comprimir(string contexto, char carac, set<char> *excluidos, Datos &datos, bool estoyEnElEof);

	virtual unsigned long int getFrecuenciaTotal(string contexto);

	void actualizarModeloYExcluidos(string contexto, char carac, set<char> *excluidos);

	void getMapa(string contexto, map<string,Caracter> &mapa, set<char> *excluidos);

	unsigned long int getFrecuenciaTotalExcluidos(string contexto, set<char> *excluidos);

	unsigned long int getFrecuenciaEsc(string contexto);

	void setExcluidos(string contexto, set<char> *excluidos);

	unsigned long int getCantExcluidosPresentesEnModelo(string contexto,set<char> *excluidos);

private:

	map <string, Contexto*> *mapaCtx;
	map <string, Contexto*>::iterator itMapaCtx;

	string contextoActual;

	Contexto* getContexto(string contexto) const;



};

#endif /* MODELOX_H_ */
